package org.wu.framework.lazy.orm.core.config;

import lombok.Data;
import org.wu.framework.core.NormalUsedString;
import org.wu.framework.lazy.orm.core.config.enums.MapStructConversionStrategy;
import org.wu.framework.lazy.orm.core.config.enums.OrmArchitecture;
import org.wu.framework.lazy.orm.core.config.enums.WebArchitecture;
import org.wu.framework.lazy.orm.core.persistence.map.EasySmartFillFieldConverter;

import java.util.Objects;

/**
 * 逆向工程
 *
 * @author : Jia wei Wu
 * @version : 1.0
 * @date : 2022/1/23 7:44 下午
 */
@Data
public class ReverseEngineering {

    /**
     * 逆向工程 允许swagger
     */
    private boolean enableSwagger = true;
    /**
     * 逆向工程 允许 正常的Crud 非继承实现的抽象
     */
    private boolean enableNormalCrud = true;
    /**
     * 逆向工程 允许 lombok.Data
     */
    private boolean enableLombokData = true;

    /**
     * 逆向工程 允许 lombok.Accessors
     */
    private boolean enableLombokAccessors = true;

    /**
     * 逆向工程 允许 mapstruct进行数据转换
     */
    private boolean enableMapStruct = true;

    /**
     * 逆向工程 mapstruct进行数据转换模式 默认使用 LazyStructMappers
     */
    private MapStructConversionStrategy mapStructConversionStrategy = MapStructConversionStrategy.LAZY_STRUCT_MAPPERS;

    /**
     * orm 框架
     */
    private OrmArchitecture ormArchitecture;
    /**
     * 架构 mvc、ddd
     */
    private WebArchitecture webArchitecture = WebArchitecture.WEB_MVC;

    /**
     * 是否添加schema
     */
    private boolean enableSchema = true;

    /**
     * 是否支持导入导出
     */
    private boolean enableExport = false;
    /**
     * 逆向工程 实体后缀
     */
    private String entitySuffix;
    /**
     * 文件路径 默认入：/Users/wujiawei/IdeaProjects/wu-framework-parent/wu-smart-integration/wu-smart-acw/wu-smart-acw-server/
     */
    private String resourceFilePrefix = Objects.requireNonNull(EasySmartFillFieldConverter.class.getResource(NormalUsedString.SLASH)).getFile();
    /**
     * 逆向工程 包名
     */
    private String packageName = "org.wu.framework.inner.lazy.example";
    /**
     * API url前缀
     */
    private String apiUrlPrefix = "";


}